//加载express模块
var express = require('express');
var mongoose = require('mongoose')
//加载模板处理模块
var swig = require('swig')
//加载body-parser,用来处理post提交过来的数据
var bodyParser = require('body-parser')
//加载 cookie模块
var Cookies = require('cookies')
//创建APP应用 => Node.js Http.createServer()创建服务
var app = express();

//设置静态资源文件托管
//当用户访问以public开始那么直接返回对应__dirname+'/public'下的文件
app.use('/public',express.static(__dirname+'/public'))
//使用中间件bodyparser
app.use(bodyParser.urlencoded({ extended: false }))
//导入用户模块进行查询当前用户是不是管理员
var User = require('./models/User')
//设置cookie 每次路径都要经过这个中间件
app.use(function(req,res,next){
    req.cookies = new Cookies(req,res);
    //获取cookies信息
    console.log(req.cookies.get('userInfo'))
    req.userInfo = {}
    if(req.cookies.get('userInfo')){
        try{
            //存储userInfo信息
            req.userInfo = JSON.parse(req.cookies.get('userInfo'))
            //获取当前用户的用户类型,判断类型
            User.findById(req.userInfo._id).then(function(userInfo){
                req.userInfo.isAdmin = Boolean(userInfo.isAdmin)
                next()
            })
        }
        catch(e){
        }        
    }else{
        next()
    }
    
})
// 第一步
//配置应用模板
//定义当前应用所使用的模板引擎
//第一个参数，模板引擎的名称，同时也是模板文件的后缀,第二个参数表示用于解析处理模板内容的方法
app.engine('html',swig.renderFile);
// 第二步
//设置模板文件存放的目录,第一个参数必须是views,第二个参数是目录
app.set('views','./views')
// 第三步
// 注册所使用的模板引擎，第一个参数必须是view engine，第二个参数和app.engine这个方法中定义的模板引擎的名称（第一个参数）是一样的
app.set('view engine','html')

//在开发过程中需要取消模板缓存
swig.setDefaults({
    cache:false,
});

// 根据不同的功能划分模块。
app.use('/admin',require('./routers/admin'));
app.use('/api',require('./routers/api'));
app.use('/',require('./routers/main'));

mongoose.connect('mongodb://localhost:27018/blog',{useMongoClient: true},function(err){
    if(err){
        console.log('数据库连接失败')
    }else{
        console.log('数据库连接成功')
        app.listen(3003)
    }
})
// 监听端口请求



//用户发送http请求-》url-》解析路由-》找到匹配的规则-》执行指定绑定函数，返回对应内容至用户
// /public-》惊天-》直接读取指定目录下的文件，返回给用户
// -》动态-》处理业务逻辑，加载模板，解析模板-》返回给用户